/**
 * Universidad del Valle de Guatemala
 * Algoritmos y estructura de Datos.
 * @autor Evelyn Lissete Paiz   11365
 * Sección: 20
 * 15 de julio, 2012
 * Programa que permite utilizar de una calculadora en forma postfix.
 */

package hoja_dos;

import java.util.Vector;

public class StackVector <E> implements Stack <E>{
    

    //------------------------------------------------------------------------
    // Atributos:
    //------------------------------------------------------------------------
        
    private Vector <E> datos;

    
    //------------------------------------------------------------------------
    // Constructor:
    //------------------------------------------------------------------------
    
    /**
     * Método que permite la creación de una nueva pila.
     * pre: -
     * post: Se construye una nueva pila.
     */
    public StackVector() {
        this.datos = new Vector <E> ();
    }
    
    //------------------------------------------------------------------------
    // Métodos:
    //------------------------------------------------------------------------
    
    /**
     * Método encargado de guardar un dato en la pila.
     * pre: -
     * post: Se agrega un nuevo dato a la pila.
     * @param dato El dato que se va a guardar. 
     */
    @Override
    public void push(E dato) {
        this.datos.add(dato);
    }

    /**
     * Método encargado de sacar un dato de la pila (el último en ingresarse).
     * pre: La pila no se encuentra vacia.
     * post: Se remueve último dato ingresado.
     */
    @Override
    public E pop() {
        return this.datos.remove(size()-1);
    }

    /**
     * Método encargado de permitir observar el último dato que se ingesó.
     * pre: La pila no se encuentra vacia.
     * post: Se regresa el valor del dato más proximó a remover.
     */
    @Override
    public E peek() {
        return this.datos.get(size()-1);
    }

    /**
     * Método encargado de revisar si la pila se encuentra vacia.
     * pre: -
     * post: regresa tru si está vacia o false si tiene algún dato.
     */
    @Override
    public boolean empty() {
        return size() == 0;
    }

    /**
     * Método encargado de mostrar el número de datos que contiene la pila.
     * pre: -
     * post: Retorna el número de datos que hay en la pila. 
     */
    @Override
    public int size() {
        return this.datos.size();
    }   
    
}
